home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / ddx-mips.zip / MIPSKBDX.C < prev    next >
C/C++ Source or Header  |  1992-07-31  |  8KB  |  263 lines

  1. /*
  2.  * $XConsortium$
  3.  *
  4.  * Copyright 1991 MIPS Computer Systems, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and its
  7.  * documentation for any purpose is hereby granted without fee, provided that
  8.  * the above copyright notice appear in all copies and that both that
  9.  * copyright notice and this permission notice appear in supporting
  10.  * documentation, and that the name of MIPS not be used in advertising or
  11.  * publicity pertaining to distribution of the software without specific,
  12.  * written prior permission.  MIPS makes no representations about the
  13.  * suitability of this software for any purpose.  It is provided "as is"
  14.  * without express or implied warranty.
  15.  *
  16.  * MIPS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  17.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL MIPS
  18.  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  19.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  20.  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
  21.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  22.  */
  23. #ident    "$Header: mipsKbdXT.c,v 1.5 91/07/10 15:43:43 dd Exp $"
  24.  
  25. /*
  26.  *    keysym mapping for the XT keyboard.
  27.  */
  28.  
  29. #include <sys/types.h>
  30. #include "X.h"
  31. #include "Xmd.h"
  32. #include "input.h"
  33. #include "keysym.h"
  34. #include "mips.h"
  35. #include "mipsKbd.h"
  36.  
  37. extern void specialKeybdEvent(), genKeybdEvent();
  38.  
  39. /* PC/XT keyboard type */
  40.  
  41. #ifdef XT_KEYBOARD
  42. KeySym xt_KeyMap[] = {
  43.     XK_Escape,        NoSymbol,    /* 0x01 esc(arbitrary mapping) */
  44.     XK_1,        XK_exclam,    /* 0x02 1 ! */
  45.     XK_2,        XK_at,        /* 0x03 2 @@ */
  46.     XK_3,        XK_numbersign,    /* 0x04 3 # */
  47.     XK_4,        XK_dollar,    /* 0x05 4 $ */
  48.     XK_5,        XK_percent,    /* 0x06 5 % */
  49.     XK_6,        XK_asciicircum,    /* 0x07 6 ^ */
  50.     XK_7,        XK_ampersand,    /* 0x08 7 & */
  51.     XK_8,        XK_asterisk,    /* 0x09 8 * */
  52.     XK_9,        XK_parenleft,    /* 0x0a 9 ( */
  53.     XK_0,        XK_parenright,    /* 0x0b 0 ) */
  54.     XK_minus,        XK_underscore,    /* 0x0c - _ */
  55.     XK_equal,        XK_plus,    /* 0x0d = + */
  56.     XK_BackSpace,    NoSymbol,    /* 0x0e bs  */
  57.     XK_Tab,        NoSymbol,    /* 0x0f tab */
  58.     XK_Q,        NoSymbol,    /* 0x10 Q  */
  59.     XK_W,        NoSymbol,    /* 0x11 W  */
  60.     XK_E,        NoSymbol,    /* 0x12 E  */
  61.     XK_R,        NoSymbol,    /* 0x13 R  */
  62.     XK_T,        NoSymbol,    /* 0x14 T  */
  63.     XK_Y,        NoSymbol,    /* 0x15 Y  */
  64.     XK_U,        NoSymbol,    /* 0x16 U  */
  65.     XK_I,        NoSymbol,    /* 0x17 I  */
  66.     XK_O,        NoSymbol,    /* 0x18 O  */
  67.     XK_P,        NoSymbol,    /* 0x19 P  */
  68.     XK_bracketleft,    XK_braceleft,    /* 0x1a [ { */
  69.     XK_bracketright,    XK_braceright,    /* 0x1b ] } */
  70.     XK_Return,        NoSymbol,    /* 0x1c RETURN */
  71.     XK_Control_L,    NoSymbol,    /* 0x1d CONTROL */
  72.     XK_A,        NoSymbol,    /* 0x1e A  */
  73.     XK_S,        NoSymbol,    /* 0x1f S  */
  74.     XK_D,        NoSymbol,    /* 0x20 D  */
  75.     XK_F,        NoSymbol,    /* 0x21 F  */
  76.     XK_G,        NoSymbol,    /* 0x22 G  */
  77.     XK_H,        NoSymbol,    /* 0x23 H  */
  78.     XK_J,        NoSymbol,    /* 0x24 J  */
  79.     XK_K,        NoSymbol,    /* 0x25 K  */
  80.     XK_L,        NoSymbol,    /* 0x26 L  */
  81.     XK_semicolon,    XK_colon,    /* 0x27 ; : */
  82.     XK_quoteright,    XK_quotedbl,    /* 0x28 ' " */
  83.     XK_quoteleft,    XK_asciitilde,    /* 0x29 ` ~ */
  84.     XK_Shift_L,        NoSymbol,    /* 0x2a SHIFT */
  85.     XK_backslash,    XK_bar,        /* 0x2b \ | */
  86.     XK_Z,        NoSymbol,    /* 0x2c z  */
  87.     XK_X,        NoSymbol,    /* 0x2d x  */
  88.     XK_C,        NoSymbol,    /* 0x2e c  */
  89.     XK_V,        NoSymbol,    /* 0x2f v  */
  90.     XK_B,        NoSymbol,    /* 0x30 b  */
  91.     XK_N,        NoSymbol,    /* 0x31 n  */
  92.     XK_M,        NoSymbol,    /* 0x32 m  */
  93.     XK_comma,        XK_less,    /* 0x33 , < */
  94.     XK_period,        XK_greater,    /* 0x34 . > */
  95.     XK_slash,        XK_question,    /* 0x35 / ? */
  96.     XK_Shift_R,        NoSymbol,    /* 0x36 SHIFT */
  97.     XK_KP_Multiply,    NoSymbol,    /* 0x37 *  */
  98.     XK_Alt_L,        NoSymbol,    /* 0x38 Left ALT   */
  99.     XK_space,        NoSymbol,    /* 0x39 sp */
  100.     XK_Caps_Lock,    NoSymbol,    /* 0x3a CAPS LOCK   */
  101.     XK_F1,        NoSymbol,    /* 0x3b F1  */
  102.     XK_F2,        NoSymbol,    /* 0x3c F2  */
  103.     XK_F3,        NoSymbol,    /* 0x3d F3  */
  104.     XK_F4,        NoSymbol,    /* 0x3e F4  */
  105.     XK_F5,        NoSymbol,    /* 0x3f F5  */
  106.     XK_F6,        NoSymbol,    /* 0x40 F6  */
  107.     XK_F7,        NoSymbol,    /* 0x41 F7  */
  108.     XK_F8,        NoSymbol,    /* 0x42 F8  */
  109.     XK_F9,        NoSymbol,    /* 0x43 F9  */
  110.     XK_F10,        NoSymbol,    /* 0x44 F10 */
  111.     XK_Num_Lock,    NoSymbol,    /* 0x45 Num Lock */
  112.     XK_Pause,        NoSymbol,    /* 0x46 Scroll Lock */
  113.     XK_KP_7,        NoSymbol,    /* 0x47 7  */
  114.     XK_KP_8,        NoSymbol,    /* 0x48 8  */
  115.     XK_KP_9,        NoSymbol,    /* 0x49 9  */
  116.     XK_KP_Subtract,    NoSymbol,    /* 0x4a -  */
  117.     XK_KP_4,        NoSymbol,    /* 0x4b 4  */
  118.     XK_KP_5,        NoSymbol,    /* 0x4c 5  */
  119.     XK_KP_6,        NoSymbol,    /* 0x4d 6  */
  120.     XK_KP_Add,        NoSymbol,    /* 0x4e +  */
  121.     XK_KP_1,        NoSymbol,    /* 0x4f 1  */
  122.     XK_KP_2,        NoSymbol,    /* 0x50 2  */
  123.     XK_KP_3,        NoSymbol,    /* 0x51 3  */
  124.     XK_KP_0,        NoSymbol,    /* 0x52 0  */
  125.     XK_KP_Decimal,    NoSymbol,    /* 0x53 .  */
  126.     XK_Print,        NoSymbol,    /* 0x54 Print */
  127.     XK_Prior,        NoSymbol,    /* 0x55 Prev Screen  */
  128.     XK_Next,        NoSymbol,    /* 0x56 Next Screen  */
  129.     XK_F11,        NoSymbol,    /* 0x57 F11 */
  130.     XK_F12,        NoSymbol,    /* 0x58 F12 */
  131.     XK_Up,        NoSymbol,    /* 0x59 uparrow */
  132.     XK_Left,        NoSymbol,    /* 0x5a left arrow  */
  133.     XK_Down,        NoSymbol,    /* 0x5b down arrow  */
  134.     XK_Right,        NoSymbol,    /* 0x5c right arrow */
  135.     XK_Delete,        NoSymbol,    /* 0x5d DEL */
  136.     XK_KP_Enter,    NoSymbol,    /* 0x5e ENTER */
  137.     XK_Control_R,    NoSymbol,    /* 0x5f Right control */
  138.     XK_Alt_R,        NoSymbol,    /* 0x60 Right alt */
  139.     XK_Insert,        NoSymbol,    /* 0x61 Insert */
  140.     XK_KP_Divide,    NoSymbol,    /* 0x62 KP_Divide */
  141.     XK_Home,        NoSymbol,    /* 0x63 KP_Home */
  142.     XK_End,        NoSymbol,    /* 0x64 KP_End */
  143.     XK_Break,        NoSymbol,    /* 0x65 KP_Break */
  144. };
  145.  
  146. CARD8 xt_ModMap[MAP_LENGTH] = {
  147. /* 00-0f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  148. /* 10-1f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  149. /* 20-2f */     0, 0, 0, 0, 0,MC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  150. /* 30-3f */     0, 0,MS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,MS, 0,
  151. /* 40-4f */    M1, 0,ML, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  152. /* 50-5f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  153. /* 60-6f */     0, 0, 0, 0, 0, 0, 0,MC,M1, 0, 0, 0, 0, 0, 0, 0,
  154. /* 70-7f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  155. /* 80-8f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  156. /* 90-9f */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  157. /* a0-af */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  158. /* b0-bf */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  159. /* c0-cf */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  160. /* d0-df */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  161. /* e0-ef */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  162. /* f0-ff */     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  163. };
  164.  
  165. void
  166. xtKeybdEvent(pKeybd, code)
  167. DevicePtr    pKeybd;
  168. u_char        code;
  169. {
  170.     int            release;
  171.     static int        translate = 0;
  172.     u_char        kindex;
  173.  
  174.     /* Random 0xfa and 0xfe characters are being delivered */
  175.  
  176.     if ((code & 0xfa) == 0xfa)
  177.     return;
  178.  
  179.     if (code == 0xe0)
  180.     translate = 1;
  181.     else if (code == 0xe1)
  182.     translate = 2;
  183.     else {
  184.     kindex = code & 0x7f;
  185.     release = code & 0x80;
  186.     if (translate == 1) {
  187.         translate = 0;
  188.         switch (kindex) {
  189.         case 0x1c:
  190.             kindex = 0x5e;    /* KP_Enter */
  191.             break;
  192.         case 0x1d:
  193.             kindex = 0x5f;    /* Control_R */
  194.             break;
  195.         case 0x35:
  196.             kindex = 0x62;    /* KP_Divide */
  197.             break;
  198.         case 0x37:
  199.             kindex = 0x54;    /* Print */
  200.             break;
  201.         case 0x38:
  202.             kindex = 0x60;    /* Alt_R */
  203.             break;
  204.         case 0x46:
  205.             kindex = 0x65;    /* Break */
  206.             break;
  207.         case 0x47:
  208.             kindex = 0x63;    /* Home */
  209.             break;
  210.         case 0x48:
  211.             kindex = 0x59;    /* Up arrow */
  212.             break;
  213.         case 0x49:
  214.             kindex = 0x55;    /* Prior/Page Up */
  215.             break;
  216.         case 0x4b:
  217.             kindex = 0x5a;    /* Left arrow */
  218.             break;
  219.         case 0x4d:
  220.             kindex = 0x5c;    /* Right arrow */
  221.             break;
  222.         case 0x4f:
  223.             kindex = 0x64;    /* End */
  224.             break;
  225.         case 0x50:
  226.             kindex = 0x5b;    /* Down arrow */
  227.             break;
  228.         case 0x51:
  229.             kindex = 0x56;    /* Next/Page Down */
  230.             break;
  231.         case 0x52:
  232.             kindex = 0x61;    /* Insert */
  233.             break;
  234.         case 0x53:
  235.             kindex = 0x5d;    /* Delete */
  236.             break;
  237.         case 0x2a:
  238.         case 0xaa:
  239.         default:
  240.             return;
  241.         }
  242.     }
  243.     else if (translate == 2) {
  244.         translate = (kindex == 0x1d) ? 3 : 0;
  245.         return;
  246.     }
  247.     else if (translate == 3) {
  248.         translate = 0;
  249.         if (kindex == 0x45) {
  250.         kindex = 0x65;
  251.         if (release)
  252.             specialKeybdEvent();
  253.         }
  254.         else
  255.         return;
  256.     }
  257.  
  258.     kindex += keybdType[XT_KEYBOARD].offset;
  259.     genKeybdEvent(pKeybd, release, kindex);
  260.     }
  261. }
  262. #endif /* XT_KEYBOARD */
  263.